<?php

class User_User {
  
	public function __construct(){
			
	}
	/**
	 * Сообщение пользователю об ошибке или успехе выполнения некоторй операции
	 *
	 * @var string
	 */
	private static $userMessage;
	/**
	 * Тип сообщение пользователю об ошибке или успехе выполнения некоторй операции
	 * <0 - сообщение об ошибке
	 * 0 - нет сообщения
	 * >0 - сообщение об успехе
	 * @var integer
	 */	
	private static $userMessageType;
	/**
	 * Метод возвращает полную информацию о пользователе, относящемся к данной сессии
	 *
	 * @return array - массив с информацией о пользователе
	 */
	public static function getUserOfSession(){
	  static $arrUser;
    if ( (!isset($arrUser)) || ($arrUser == null) ) {  
  	  $objSession = User_Session::instance();
      if (! $objSession->getUserId())// если к сессии не относится ни один пользователь, то ничего не возвращаем
        $arrUser = null;
  	  else
        $arrUser = self::getUser($objSession->getUserId());
    }
    return $arrUser;
	}
  /**
   * Метод возвращает сообщение, которое следует вывести пользователю
   *
   * @return string
   */
  public static function getUserMessage() {
    return isset(self::$userMessage) ? self::$userMessage : null;
  }
  /**
   * Метод возвращает тип сообщения, которое следует вывести пользователю
	 * <0 - сообщение об ошибке
	 * 0 - нет сообщения
	 * >0 - сообщение об успехе
   * @return integer
   */
  public static function getUserMessageType() {
    return isset(self::$userMessageType) ? self::$userMessageType : 0;
  }  
  /**
   * Метод устанавливает сообщение, которое следует вывести пользователю
   *
   * @param string $message
   * @param integer $messageType
   */
	public static function setUserMessage($message, $messageType = -1){
	  self::$userMessage = $message;
	  self::$userMessageType = $messageType;
	}
  /**
   * Метод удаляет сообщение, которое следует вывести пользователю
   *
   */
	public static function deleteUserMessage(){
	  self::$userMessage = null;
	  self::$userMessageType = 0;
	}	
	/**
	 * Метод возвращает полную информацию о пользователе по его идентификатору
	 *
	 * @param integer $idUser - идентификатор пользователя
	 * @return array - массив с информацией о пользователе
	 */
	public static function getUser($idUser){
		$objDB = Service_Database::instance();
		$stmt = "SELECT `user`.`eMail`, `user`.`first_name`, `user`.`last_name`, `user`.`pic_path`, `user`.`time_zone`
      		   FROM `user`
      		   WHERE ID_user = '" . $idUser ."'";
		return $objDB->selectOne($stmt);
	}
	
	/**
	 * Получаем список зарегистрированных пользователей (ДОРАБОТАТЬ)
	 *
	 * @return unknown
	 */
	public function getListOfUsers(){
		$objDB = Service_Database::instance();
		$stat = "SELECT COUNT(`article`.`ID_user`) AS `countArticles`, `user`.`ID_user`, `user`.`first_name`, `user`.`last_name`
				     FROM `user` LEFT JOIN `article` ON `article`.`ID_user`=`user`.`ID_user`
				     GROUP BY `user`.`ID_user`
				     ORDER BY `countArticles` DESC";
		return $objDB->select($stat);
	}
	static public function getUserInfo($userId){
		$objDB = Service_Database::instance();
		$stat = "SELECT * FROM `user` WHERE `ID_user`='" . $userId . "'";
		$arrResult = $objDB->select($stat);
		if (sizeof($arrResult) < 1)
			return false;
		return $arrResult[0];
	}
		static public function registrateUser($userPass, $userName, $userEMail){
		$objDB = Service_Database::instance();
		$strUser = "SELECT `ID_user` FROM `user` WHERE `eMail`='" . $userEMail ."'";
		if (sizeof($objDB->select($strUser)))
		  return -1;
		else
		{
  		$stat="INSERT INTO `user` (`pass`, `first_name`, `eMail`, `registration`)
  		       VALUES('" . $userPass . "', '" . $userName . "', '" . $userEMail . "', now())";
  		return $objDB->query($stat);
		}
	}
	public function getCountMessages($ID_user){
		$objDB = Service_Database::instance();
		$stat = "SELECT COUNT(`message`.`ID_user_to`) AS countMessage 
		         FROM `message` 
		         WHERE `message`.`reading_date` IS NULL AND `message`.`ID_user_to`='" . $ID_user . "'";
		$messageCount = $objDB->select($stat);
		return $messageCount[0]['countMessage'];
	}

	
}
?>